/********************************************************************************
 * Project Name		[JavaSE_Fundamentals]
 * File Name     	[DeadLock.java]
 * Creation Date 	[2015-01-01]
 * 
 * Copyright© ge.y.yang@gmail.com All Rights Reserved
 * 
 * Work hard, play harder, think big and keep fit
 ********************************************************************************/
package thread;

/**
 * 线程的死锁
 * 
 *
 * 死锁现象出现 的根本原因:<br/>
 * 1. 存在两个或者两个以上的线程<br/>
 * 2. 存在两个或者两个以上的共享资源<br/>
 * 
 * 死锁没有解决方案
 * 
 * @author 不落的太阳(Sean Yang aka ShortPeace)
 * @version 1.0
 * @since jdk 1.8
 * 
 */
public class DeadLock extends Thread {

	public DeadLock(String name) {
		super(name);
	}

	@Override
	public void run() {
		if ("Jack".equals(Thread.currentThread().getName())) {
			synchronized ("遥控器") {
				System.out.println("Jack拿到了遥控器, 准备去拿电池...");
				synchronized ("电池") {
					System.out.println("Jack拿到了遥控器和电池, 开启空调...");
				}
			}
		} else if ("Rose".equals(Thread.currentThread().getName())) {
			synchronized ("电池") {
				System.out.println("Rose拿到了电池, 准备去拿遥控器...");
				synchronized ("遥控器") {
					System.out.println("Rose拿到了遥控器和电池, 开启空调...");
				}
			}
		}
	}

	public static void main(String[] args) {
		Thread t1 = new DeadLock("Jack");
		Thread t2 = new DeadLock("Rose");

		t1.start();
		t2.start();
	}
}
